Setup

Data preparation

t-SNE: on characters

2 dimensions

No trace type specified:
  Based on info supplied, a 'scatter3d' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#scatter3d
No scatter3d mode specifed:
  Setting the mode to markers
  Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
No trace type specified:
  Based on info supplied, a 'scatter3d' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#scatter3d
No scatter3d mode specifed:
  Setting the mode to markers
  Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode

preserve489439c41bf72c71

3 dimensions

No trace type specified:
  Based on info supplied, a 'scatter3d' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#scatter3d
No scatter3d mode specifed:
  Setting the mode to markers
  Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
No trace type specified:
  Based on info supplied, a 'scatter3d' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#scatter3d
No scatter3d mode specifed:
  Setting the mode to markers
  Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode

preserve3c700d0ccf40fa11

4 dimensions

No trace type specified:
  Based on info supplied, a 'scatter3d' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#scatter3d
No scatter3d mode specifed:
  Setting the mode to markers
  Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
No trace type specified:
  Based on info supplied, a 'scatter3d' trace seems appropriate.
  Read more about this trace type -> https://plot.ly/r/reference/#scatter3d
No scatter3d mode specifed:
  Setting the mode to markers
  Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode

preserveeaa3e507bcac9f2b

Joining, by = "capacity"

t-SNE: on capacities

2 dimensions

no non-missing arguments to min; returning Infno non-missing arguments to max; returning -Infno non-missing arguments to min; returning Infno non-missing arguments to max; returning -Inf

2 dimensions sliding window

Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = "bin"
Joining, by = "capacity"

Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = "bin"
Joining, by = "capacity"

Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = c("capacity", "X1", "X2", "bin")
Joining, by = "bin"
Joining, by = "capacity"

Joining, by = "capacity"

LS0tCnRpdGxlOiAiRGlta2lkOiBFeHBsb3JpbmcgdFNORSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IgZ2xvYmFsX29wdGlvbnMsIGluY2x1ZGUgPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKIyBTZXR1cAoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGfQojIGxvYWQgbGlicmFyaWVzCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KGxhbmdjb2cpICMgc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vbGFuZ2NvZy9sYW5nY29nCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KHBsb3RseSkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkocm1zKQpsaWJyYXJ5KFJ0c25lKQpsaWJyYXJ5KHNjYWxlcykKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CiMgbWFrZSByb3VuZGluZyBmdW5jdGlvbgpyb3VuZDIgPC0gZnVuY3Rpb24oeCkge2Zvcm1hdChyb3VuZCh4LCAyKSwgbnNtYWxsID0gMil9CgojIG1ha2UgY2xlYW51cCBmdW5jdGlvbgpjbGVhbnVwIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UsIGFnZV9ncm91cCkgewogIGlmKGdyZXBsKCJhZHVsdCIsIGFnZV9ncm91cCkpIHsKICAgIAogICAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICAgIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGRfcmF3X3N0dWR5MX0KICAgIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkX3Jhd19zdHVkeTFifQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGRfcmF3X3N0dWR5MWN9CiAgICAKICAgICMgZW5hY3QgZXhjbHVzaW9uYXJ5IGNyaXRlcmlhCiAgICBkX2NsZWFuXzEgPC0gZAogICAgCiAgICAjIHJlY29kZSBiYWNrZ3JvdW5kIGFuZCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMKICAgIGRfY2xlYW4gPC0gZF9jbGVhbl8xICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IG51bWJlcgogICAgICAgIHN0dWR5ID0gZmFjdG9yKHN0dWR5KSkgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmFjZQogICAgICAgIHJhY2VfY2F0MiA9IGZhY3RvcihzdWIoIiArJCIsICIiLCBldGhuaWNpdHkpKSwKICAgICAgICByYWNlX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmFjZV9jYXQyKSA9PSBULCAibXVsdGlyYWNpYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJhY2VfY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHksIHN1YmlkOmNvdW50cnlfc2VsZnJlcCwgYWdlX2dyb3VwLCByYWNlX2NhdDMpICU+JQogICAgICByZW5hbWUocmFjZV9jYXQgPSByYWNlX2NhdDMpICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHJlbGlnaW9uIChub3RlOiBvbmx5IGRlYWxpbmcgd2l0aCBjaGlsZGhvb2QgcmVsaWdpb24gZm9yIG5vdykKICAgICAgICByZWxpZ2lvbl9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIHJlbGlnaW9uQ2hpbGQpKSwKICAgICAgICByZWxpZ2lvbl9jYXQzID0gZmFjdG9yKGlmZWxzZShncmVwbCgiICIsIHJlbGlnaW9uX2NhdDIpID09IFQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXJlbGlnaW91cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMuY2hhcmFjdGVyKHJlbGlnaW9uX2NhdDIpKSkpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHN0dWR5OnJhY2VfY2F0LCByZWxpZ2lvbl9jYXQzKSAlPiUKICAgICAgcmVuYW1lKHJlbGlnaW9uX2NhdCA9IHJlbGlnaW9uX2NhdDMpCiAgICAKICAgICMgcmVtb3ZlIGV4dHJhbmVvdXMgZGZzIGFuZCB2YXJpYWJsZXMKICAgIHJtKGQsIGRfY2xlYW5fMSkKICB9CiAgCiAgaWYoZ3JlcGwoImNoaWxkIiwgYWdlX2dyb3VwKSkgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZF9yYXdfc3R1ZHkyfQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpe2QgPC0gZF9yYXdfc3R1ZHkzfQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZF9yYXdfc3R1ZHk0fQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNSIpe2QgPC0gZF9yYXdfc3R1ZHk1fQogICAgCiAgICAjIHJlY29kZSBiYWNrZ3JvdW5kIGFuZCBkZW1vZ3JhcGhpYyB2YXJpYWJsZXMKICAgIGRfY2xlYW5fMiA8LSBkICU+JQogICAgICBtdXRhdGUoICMgZGVhbCB3aXRoIHN0dWR5IG51bWJlcgogICAgICAgIHN0dWR5ID0gZmFjdG9yKHN0dWR5KSwKICAgICAgICByZXNwb25zZU51bSA9IGlmZWxzZSghaXMubmEocmVzcG9uc2VOdW0pLCByZXNwb25zZU51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocmVzcG9uc2UgPT0gIm5vIiwgMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyZXNwb25zZSA9PSAia2luZGEiLCAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHJlc3BvbnNlID09ICJ5ZXMiLCAxLCBOQSkpKSkpCiAgICAjIE5PVEU6IG5lZWQgdG8gcmVjb25jaWxlIHJhY2UvZXRobmljaXR5IGF0IHNvbWUgcG9pbnQuLi4KICAgICMgTk9URTogbmVlZCB0byBkZWFsIHdpdGggZ2VuZGVyIGF0IHNvbWUgcG9pbnQuLi4KICAKICAgIGRfY2xlYW4gPC0gZF9jbGVhbl8yCiAgICAKICAgICMgcmVtb3ZlIGV4dHJhbmVvdXMgZGZzIGFuZCB2YXJpYWJsZXMKICAgIHJtKGQsIGRfY2xlYW5fMikKICB9CiAgCiAgIyByZW1vdmUgb3V0bGllcnMgaWYgZGVzaXJlZAogIGlmKGNob3Nlbk91dGxpZXJIYW5kbGluZyA9PSAicmVtb3ZlIikgewogICAgCiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIGdhdGhlcihjYXBhY2l0eSwgc2NvcmUsIGhhcHB5OnByaWRlKSAlPiUKICAgICAgZ3JvdXBfYnkoY2hhcmFjdGVyLCBjYXBhY2l0eSkgJT4lCiAgICAgIGZpbHRlcighc2NvcmUgJWluJSBib3hwbG90LnN0YXRzKHNjb3JlLCAyLjUpJG91dCkgJT4lCiAgICAgIHNwcmVhZChjYXBhY2l0eSwgc2NvcmUpICU+JQogICAgICBhcnJhbmdlKGNoYXJhY3Rlciwgc3ViaWQpCiAgICAKICB9CiAgCiAgIyBmaWx0ZXIgY2hhcmFjdGVycyBpZiBkZXNpcmVkCiAgaWYoaXMuZWxlbWVudCgibm9uZSIsIGNob3NlbkV4Y2x1ZGUpKSB7fSBlbHNlIHsKICAgIAogICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICBmaWx0ZXIoIWNoYXJhY3RlciAlaW4lIGNob3NlbkV4Y2x1ZGUpCiAgICAKICAgIH0KICAgIAogICMgZmlsdGVyIGl0ZW1zIGlmIGRlc2lyZWQKICBpZihpcy5lbGVtZW50KCJub25lIiwgY2hvc2VuRXhjbHVkZUl0ZW0pKSB7fSBlbHNlIHsKICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgZHBseXI6OmZpbHRlcighY2FwYWNpdHkgJWluJSBjaG9zZW5FeGNsdWRlSXRlbSkKICB9CiAgCiAgIyBkcm9wIHRyaWFscyA8MjUwIG1zCiAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgZmlsdGVyKHJ0ID49IDI1MCB8IGlzLm5hKHJ0KSkKICAKICAjIGNlbnRlciByZXNwb25zZSB2YXJpYWJsZQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIikgewogICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICBtdXRhdGUocmVzcG9uc2VOdW1DID0gcmVzcG9uc2VOdW0gLSA0KQogIH0gZWxzZSB7CiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIG11dGF0ZShyZXNwb25zZU51bUMgPSByZXNwb25zZU51bSAtIDAuNSkKICB9CgogICAgIyByZW5hbWUgY2hhcmFjdGVyIG5hbWUgdmFyaWFibGVzCiAgaWYoImNoYXJOYW1lIiAlaW4lIG5hbWVzKGRfY2xlYW4pKSB7CiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lIHJlbmFtZShjaGFyYWN0ZXIgPSBjaGFyTmFtZSkKICB9CiAgCiAgIyBjbGVhbnVwCiAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgZmlsdGVyKCFpcy5uYShzdWJpZCksICFpcy5uYShjaGFyYWN0ZXIpLCAhaXMubmEoY2FwYWNpdHkpKQogIAogICMgcmV0dXJuIGNsZWFuZWQgZGF0YXNldAogIHJldHVybihkX2NsZWFuKQp9CgojIG1ha2UgZnVuY3Rpb24gZm9yIHN0cmlwcGluZyBkYXRhZnJhbWVzIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbgptYWtlRFJERiA8LSBmdW5jdGlvbihkYXRhc291cmNlLCBjaG9zZW5Db25kaXRpb24pIHsKICAKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA1Iil7ZCA8LSBkNX0KCiAgIyBmaWx0ZXIgYnkgY2hhcmFjdGVyIGlmIHNwZWNpZmllZAogIGlmKGNob3NlbkNvbmRpdGlvbiAlaW4lIGMoImJlZXRsZSIsICJyb2JvdCIpKSB7CiAgICBkIDwtIGQgJT4lIGZpbHRlcihjaGFyYWN0ZXIgPT0gY2hvc2VuQ29uZGl0aW9uKQogIH0KCiAgIyBtYWtlIHN0cmlwcGVkIGRhdGFmcmFtZSBmb3IgZGltZW5zaW9uIHJlZHVjYXRpb24gYW5hbHlzZXMKICBkX3N0cmlwIDwtIGQgJT4lCiAgICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlciksICFpcy5uYShzdWJpZCksICFpcy5uYShjYXBhY2l0eSksIGNhcGFjaXR5ICE9ICIiKSAlPiUKICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKGNoYXJhY3Rlciwgc3ViaWQsIHNlcCA9ICJfIikpICU+JQogICAgc2VsZWN0KHN1YmlkLCBjYXBhY2l0eSwgcmVzcG9uc2VOdW0pICU+JQogICAgc3ByZWFkKGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgIGNvbHVtbl90b19yb3duYW1lcyh2YXIgPSAic3ViaWQiKQoKICAjIHJldHVybiBzdHJpcHBlZCBkYXRhZnJhbWUKICByZXR1cm4oZF9zdHJpcCkKfQoKIyBtYWtlIGRlbW9ncmFwaGljcyBmdW5jdGlvbnMKZGVtb1NhbXBsZVNpemUgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA1Iil7ZCA8LSBkNX0KCiAgIyBnZXQgZGlzdGluY3Qgc3ViaWRzCiAgc2FtcGxlX3NpemUgPC0gZCAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlcikgJT4lIGNvdW50KGNoYXJhY3RlcikgJT4lIGRhdGEuZnJhbWUoKQoKICAjIGFkZCB0b3RhbCBzYW1wbGUgc2l6ZSAgCiAgc2FtcGxlX3NpemUgPC0gcmJpbmQoc2FtcGxlX3NpemUgJT4lIG11dGF0ZShjaGFyYWN0ZXIgPSBhcy5jaGFyYWN0ZXIoY2hhcmFjdGVyKSksCiAgICAgICAgICAgICAgICAgICAgICAgYyhjaGFyYWN0ZXIgPSAiYWxsIiwgbiA9IGQgJT4lIGRpc3RpbmN0KHN1YmlkKSAlPiUgY291bnQoKSAlPiUgYXMubnVtZXJpYygpKSkKICAKICAjIHJldHVybiBkYXRhZnJhbWUKICByZXR1cm4oc2FtcGxlX3NpemUpCn0KZGVtb0R1cmF0aW9uIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYiIpe2QgPC0gZDFifQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFjIil7ZCA8LSBkMWN9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpe2QgPC0gZDN9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNSIpe2QgPC0gZDV9CgogICMgZ2V0IHNhbXBsZSBzaXplIHBlciBjaGFyYWN0ZXIKICBkdXJhdGlvbiA8LSBkICU+JQogICAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgZHVyYXRpb24pICU+JQogICAgbXV0YXRlKGR1cmF0aW9uID0gYXMubnVtZXJpYyhkdXJhdGlvbikpICU+JQogICAgZ3JvdXBfYnkoY2hhcmFjdGVyKSAlPiUKICAgIHN1bW1hcmlzZShtaW5fZHVyYXRpb24gPSBtaW4oZHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWF4X2R1cmF0aW9uID0gbWF4KGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1lZGlhbl9kdXJhdGlvbiA9IG1lZGlhbihkdXJhdGlvbiwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtZWFuX2R1cmF0aW9uID0gbWVhbihkdXJhdGlvbiwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBzZF9kdXJhdGlvbiA9IHNkKGR1cmF0aW9uLCBuYS5ybSA9IFQpKQoKICAjIGFkZCB0b3RhbCBkdXJhdGlvbgogIGFsbCA8LSBkICU+JQogICAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgZHVyYXRpb24pICU+JQogICAgbXV0YXRlKGR1cmF0aW9uID0gYXMubnVtZXJpYyhkdXJhdGlvbikpICU+JQogICAgc3VtbWFyaXNlKG1pbl9kdXJhdGlvbiA9IG1pbihkdXJhdGlvbiwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtYXhfZHVyYXRpb24gPSBtYXgoZHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVkaWFuX2R1cmF0aW9uID0gbWVkaWFuKGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1lYW5fZHVyYXRpb24gPSBtZWFuKGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNkX2R1cmF0aW9uID0gc2QoZHVyYXRpb24sIG5hLnJtID0gVCkpICU+JQogICAgbXV0YXRlKGNoYXJhY3RlciA9ICJhbGwiKQogIAogIGR1cmF0aW9uIDwtIHJiaW5kKGR1cmF0aW9uLCBhbGwpICMgbm90IHN1cmUgd2h5IGZ1bGxfam9pbiBkb2Vzbid0IHdvcmsgICAgCgogICMgcmV0dXJuIGRhdGFmcmFtZQogIHJldHVybihkdXJhdGlvbikKfQpkZW1vQWdlIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYiIpe2QgPC0gZDFifQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFjIil7ZCA8LSBkMWN9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpe2QgPC0gZDN9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNSIpe2QgPC0gZDV9CgogICMgZ2V0IHNhbXBsZSBzaXplIHBlciBjaGFyYWN0ZXIKICBhZ2UgPC0gZCAlPiUKICAgIGRpc3RpbmN0KHN1YmlkLCBjaGFyYWN0ZXIsIGFnZSkgJT4lCiAgICBtdXRhdGUoYWdlID0gYXMubnVtZXJpYyhhZ2UpKSAlPiUKICAgIGdyb3VwX2J5KGNoYXJhY3RlcikgJT4lCiAgICBzdW1tYXJpc2UobWluX2FnZSA9IG1pbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVkaWFuX2FnZSA9IG1lZGlhbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVhbl9hZ2UgPSBtZWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBzZF9hZ2UgPSBzZChhZ2UsIG5hLnJtID0gVCkpCgogICMgYWRkIHRvdGFsIGFnZQogIGFsbCA8LSBkICU+JQogICAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgYWdlKSAlPiUKICAgIG11dGF0ZShhZ2UgPSBhcy5udW1lcmljKGFnZSkpICU+JQogICAgc3VtbWFyaXNlKG1pbl9hZ2UgPSBtaW4oYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1heF9hZ2UgPSBtYXgoYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1lZGlhbl9hZ2UgPSBtZWRpYW4oYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1lYW5fYWdlID0gbWVhbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgc2RfYWdlID0gc2QoYWdlLCBuYS5ybSA9IFQpKSAlPiUKICAgIG11dGF0ZShjaGFyYWN0ZXIgPSAiYWxsIikKICBhZ2UgPC0gZnVsbF9qb2luKGFnZSwgYWxsKQoKICAjIHJldHVybiBkYXRhZnJhbWUKICByZXR1cm4oYWdlKQp9CmRlbW9HZW5kZXIgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA1Iil7ZCA8LSBkNX0KCiAgIyBnZXQgZ2VuZGVyIHBlciBjaGFyYWN0ZXIgYW5kIG92ZXJhbGwKICBnZW5kZXIgPC0gZGF0YS5mcmFtZShhZGRtYXJnaW5zKHdpdGgoZCAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgZ2VuZGVyKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlKGNoYXJhY3RlciwgZ2VuZGVyKSkpKSAlPiUKICAgIGZpbHRlcihnZW5kZXIgIT0gIlN1bSIpICU+JQogICAgcmVuYW1lKG4gPSBGcmVxKQogIAogIGdlbmRlciA8LSBnZW5kZXIgJT4lCiAgICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGlmZWxzZShjaGFyYWN0ZXIgPT0gIlN1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNoYXJhY3RlcikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJiZWV0bGUiLCAicm9ib3QiLCAiYWxsIikpKSAlPiUKICAgIGFycmFuZ2UoY2hhcmFjdGVyLCBnZW5kZXIpICU+JQogICAgc3ByZWFkKGdlbmRlciwgbikKICAKICAjIHJldHVybiBkYXRhZnJhbWUKICByZXR1cm4oZ2VuZGVyKQp9CmRlbW9SYWNlIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UpIHsKCiAgIyBzZXQgdGFyZ2V0IGRhdGFzZXQKICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxIil7ZCA8LSBkMX0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYiIpe2QgPC0gZDFifQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFjIil7ZCA8LSBkMWN9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMiIpe2QgPC0gZDJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMyIpe2QgPC0gZDN9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNCIpe2QgPC0gZDR9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgNSIpe2QgPC0gZDV9CgogICMgZ2V0IHJhY2UgcGVyIGNoYXJhY3RlciBhbmQgb3ZlcmFsbAogIHJhY2UgPC0gZGF0YS5mcmFtZShhZGRtYXJnaW5zKHdpdGgoZCAlPiUgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgcmFjZV9jYXQpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlKGNoYXJhY3RlciwgcmFjZV9jYXQpKSkpICU+JQogICAgZmlsdGVyKHJhY2VfY2F0ICE9ICJTdW0iKSAlPiUKICAgIHJlbmFtZShuID0gRnJlcSkKCiAgICByYWNlIDwtIHJhY2UgJT4lCiAgICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoaWZlbHNlKGNoYXJhY3RlciA9PSAiU3VtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbCIsIGFzLmNoYXJhY3RlcihjaGFyYWN0ZXIpKSkpICU+JQogICAgICBhcnJhbmdlKGNoYXJhY3RlciwgcmFjZV9jYXQpICU+JQogICAgICBzcHJlYWQocmFjZV9jYXQsIG4pCiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lCiAgcmV0dXJuKHJhY2UpCn0KCiMgcGxvdHRpbmcgZnVuY3Rpb25zCm1ha2VGYWNldExhYnMgPC0gZnVuY3Rpb24oZGZfcGxvdHRpbmcpIHsKICBmYWNldF9sYWJlbHMgPC0gYXJyYXkoKQogIGRmX3Bsb3R0aW5nIDwtIGRmX3Bsb3R0aW5nICU+JSBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpCiAgZm9yKGkgaW4gMTpsZW5ndGgobGV2ZWxzKGRmX3Bsb3R0aW5nJGNoYXJhY3RlcikpKSB7CiAgICBkZiA8LSBkZl9wbG90dGluZyAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSBsZXZlbHMoZGZfcGxvdHRpbmckY2hhcmFjdGVyKVtpXSkgJT4lCiAgICAgIHNlbGVjdChjaGFyYWN0ZXIsIG4pICU+JSB1bmlxdWUoKQogICAgZmFjZXRfbGFiZWxzW2ldIDwtIHBhc3RlMChkZiRjaGFyYWN0ZXIsICIgKG4gPSAiLCBkZiRuLCAiKSIpCiAgfQogIG5hbWVzKGZhY2V0X2xhYmVscykgPC0gbGV2ZWxzKGRmX3Bsb3R0aW5nJGNoYXJhY3RlcikKICByZXR1cm4oZmFjZXRfbGFiZWxzKQp9CmBgYAoKYGBge3IgbW9kZWxpbmcgZGVjaXNpb25zLCBpbmNsdWRlID0gRn0KIyByZW1vdmUgb3V0bGllcnM/CmNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAia2VlcCIKIyBjaG9zZW5PdXRsaWVySGFuZGxpbmcgPC0gInJlbW92ZSIKCiMgZXhjbHVkZSBhbnkgY29uZGl0aW9ucyAoY2hhcmFjdGVycyk/CmNob3NlbkV4Y2x1ZGUgPC0gIm5vbmUiCiMgY2hvc2VuRXhjbHVkZSA8LSBjKCJzdGFwbGVyIiwgImNhciIsICJjb21wdXRlciIpCgojIGV4Y2x1ZGUgYW55IGl0ZW1zIChtZW50YWwgY2FwYWNpdGllcyk/CiMgY2hvc2VuRXhjbHVkZUl0ZW0gPC0gIm5vbmUiCiMgY2hvc2VuRXhjbHVkZUl0ZW0gPC0gImNvbXB1dGF0aW9ucyIKY2hvc2VuRXhjbHVkZUl0ZW0gPC0gYygibWV0YWwiLCAib25fb2ZmIikKCiMgTk9URTogYWx3YXlzIGNob29zZSBtaW5pbWFsIHJlc2lkdWFsIChmbSA9ICJtaW5yZXMiKSBpbnN0ZWFkIG9mIE1MIGJlY2F1c2Ugb2Ygbm9uLW5vcm1hbGl0eQoKIyBmb3IgRUZBcywgd2hhdCBraW5kIG9mIGNvcnJlbGF0aW9uPwpjaG9zZW5Db3JUeXBlIDwtICJjb3IiICMgcGVhcnNvbiBjb3JyZWxhdGlvbgojIGNob3NlbkNvclR5cGUgPC0gInBvbHkiICMgcG9seWNob3JpYyBjb3JyZWxhdGlvbgoKIyBmb3IgRUZBcywgd2hhdCBraW5kIG9mIHJvdGF0aW9uPwojIGNob3NlblJvdFR5cGUgPC0gInZhcmltYXgiICMgdmFyaW1heCByb3RhdGlvbgpjaG9zZW5Sb3RUeXBlIDwtICJvYmxpbWluIiAjIG9ibGltaW4gcm90YXRpb24KIyBjaG9zZW5Sb3RUeXBlIDwtICJub25lIiAjIG5vIHJvdGF0aW9uCgpkYXRhLmZyYW1lKCJjb25kaXRpb25zRXhjbHVkZWQiID0gY2hvc2VuRXhjbHVkZSwKICAgICAgICAgICAib3V0bGllckhhbmRsaW5nIiA9IGNob3Nlbk91dGxpZXJIYW5kbGluZywKICAgICAgICAgICAiRUZBX2NvcnJlbGF0aW9uIiA9IGNob3NlbkNvclR5cGUsCiAgICAgICAgICAgIkVGQV9yb3RhdGlvbiIgPSBjaG9zZW5Sb3RUeXBlKQpgYGAKCiMgRGF0YSBwcmVwYXJhdGlvbgoKYGBge3IgZGF0YSB1cGxvYWQsIGluY2x1ZGUgPSBGfQojIHN0dWR5IDEgKDIwMTYtMDctMDYsIGFkdWx0cywgMiBjb25kaXRpb25zLCAzLXBvaW50IHNjYWxlLCAiZGVjaWRlIHdoYXQgdG8gZG8iIGFuZCAibWFrZSBwbGFucyIpCmRfcmF3X3N0dWR5MSA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9hZHVsdHMvdXNfcnVuLTAxXzIwMTYtMDYtMDVfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMSIsIGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUgc2VsZWN0KC1YKQoKIyBzdHVkeSAxYiAoMjAxNy0wNy0xOSwgYWR1bHRzLCAyIGNvbmRpdGlvbnMsIDctcG9pbnQgc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJtYWtlIHBsYW5zIikKZF9yYXdfc3R1ZHkxYiA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9hZHVsdHMvdXNfcnVuLTAyXzIwMTYtMDctMTlfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMWIiLCBhZ2VfZ3JvdXAgPSAiYWR1bHRzIikgJT4lIHNlbGVjdCgtWCkKCiMgc3R1ZHkgMWMgKDIwMTYtMTItMDgsIGFkdWx0cywgMiBjb25kaXRpb25zLCAzLXBvaW50IHNjYWxlLCAiaGF2ZSBmcmVlIHdpbGwiIGFuZCAiaGF2ZSBpbnRlbnRpb25zIikKZF9yYXdfc3R1ZHkxYyA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9hZHVsdHMvdXNfcnVuLTAzXzIwMTYtMTItMDhfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMWMiLCBhZ2VfZ3JvdXAgPSAiYWR1bHRzIikgJT4lIHNlbGVjdCgtWCkKCiMgc3R1ZHkgMiAoSnVuZSAtIERlY2VtYmVyIDIwMTYsIDctOXlvLCAyIGNvbmRpdGlvbnMsIDMtcG9pbnQtc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJtYWtlIHBsYW5zIikKZF9yYXdfc3R1ZHkyIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2NoaWxkcmVuL3J1bi0wMV8yMDE3LTA3LTI0X2Fub255bWl6ZWQuY3N2IikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiLCBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW5fNzkiKSAlPiUgc2VsZWN0KC1YKQoKIyBzdHVkeSAzIChKYW51YXJ5IC0gSnVuZSAyMDE3LCA3LTl5bywgOSBjb25kaXRpb25zLCAzLXBvaW50LXNjYWxlLCAiZGVjaWRlIHdoYXQgdG8gZG8iIGFuZCAibWFrZSBwbGFucyIpCmRfcmF3X3N0dWR5MyA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9jaGlsZHJlbi9ydW4tMDJfMjAxNy0wOC0wOF9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAzIiwgYWdlX2dyb3VwID0gImNoaWxkcmVuXzc5IikgJT4lIHNlbGVjdCgtWCkgJT4lCiAgbXV0YXRlKGRvYiA9IHBhcnNlX2RhdGV0aW1lKGRhdGVPZkJpcnRoLCAiJW0vJWQvJXkiKSwKICAgICAgICAgZG90ID0gcGFyc2VfZGF0ZXRpbWUoZ3N1YigiMjAxNyIsICIxNyIsIGRhdGVPZlRlc3QpLCAiJW0vJWQvJXkiKSwgCiAgICAgICAgIGFnZSA9IGludGVydmFsKHN0YXJ0ID0gZG9iLCBlbmQgPSBkb3QpIC8gZHVyYXRpb24obnVtID0gMSwgdW5pdHMgPSAieWVhcnMiKSkgJT4lCiAgc2VsZWN0KC1kYXRlT2ZCaXJ0aCwgLWRhdGVPZlRlc3QsIC1kb2IsIC1kb3QpCgojIHN0dWR5IDQgKE1heSAyMDE3IC0gcHJlc2VudCwgNC02eW8sIDkgY29uZGl0aW9ucywgMy1wb2ludC1zY2FsZSwgImRlY2lkZSB3aGF0IHRvIGRvIiBhbmQgIm1ha2UgcGxhbnMiKQpkX3Jhd19zdHVkeTQgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAzXzIwMTctMDgtMjFfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgNCIsIGFnZV9ncm91cCA9ICJjaGlsZHJlbl80NiIpICU+JSBzZWxlY3QoLVgpICU+JQogIG11dGF0ZShkb2IgPSBwYXJzZV9kYXRldGltZShkYXRlT2ZCaXJ0aCwgIiVtLyVkLyV5IiksCiAgICAgICAgIGRvdCA9IHBhcnNlX2RhdGV0aW1lKGdzdWIoIjIwMTciLCAiMTciLCBkYXRlT2ZUZXN0KSwgIiVtLyVkLyV5IiksIAogICAgICAgICBhZ2UgPSBpbnRlcnZhbChzdGFydCA9IGRvYiwgZW5kID0gZG90KSAvIGR1cmF0aW9uKG51bSA9IDEsIHVuaXRzID0gInllYXJzIikpICU+JQogIHNlbGVjdCgtZGF0ZU9mQmlydGgsIC1kYXRlT2ZUZXN0LCAtZG9iLCAtZG90KQoKIyBzdHVkeSA1IChGYWxsIDIwMTcgLSBwcmVzZW50LCA1LjUtNy41eW8gKHBsdXMpLCA5IGNvbmRpdGlvbnMsIDMtcG9pbnQtc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJtYWtlIHBsYW5zIikKZF9yYXdfc3R1ZHk1IDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2NoaWxkcmVuL3J1bi0wNF8yMDE3LTEwLTEwX2Fub255bWl6ZWQuY3N2IikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDUiLCBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW5fNS41Ny41IikgJT4lIHNlbGVjdCgtWCkgJT4lCiAgbXV0YXRlKGRvYiA9IHBhcnNlX2RhdGV0aW1lKGRhdGVPZkJpcnRoLCAiJW0vJWQvJXkiKSwKICAgICAgICAgZG90ID0gcGFyc2VfZGF0ZXRpbWUoZ3N1YigiMjAxNyIsICIxNyIsIGRhdGVPZlRlc3QpLCAiJW0vJWQvJXkiKSwgCiAgICAgICAgIGFnZSA9IGludGVydmFsKHN0YXJ0ID0gZG9iLCBlbmQgPSBkb3QpIC8gZHVyYXRpb24obnVtID0gMSwgdW5pdHMgPSAieWVhcnMiKSkgJT4lCiAgc2VsZWN0KC1kYXRlT2ZCaXJ0aCwgLWRhdGVPZlRlc3QsIC1kb2IsIC1kb3QpCmBgYAoKYGBge3IgZGF0YSBjbGVhbnVwLCBpbmNsdWRlID0gRn0KIyBjbGVhbiB1cCBkYXRhc2V0cwpkMSA8LSBjbGVhbnVwKCJzdHVkeSAxIiwgImFkdWx0cyIpCmQxYiA8LSBjbGVhbnVwKCJzdHVkeSAxIiwgImFkdWx0cyIpCmQxYyA8LSBjbGVhbnVwKCJzdHVkeSAxIiwgImFkdWx0cyIpCmQyIDwtIGNsZWFudXAoInN0dWR5IDIiLCAiY2hpbGRyZW4iKQpkMyA8LSBjbGVhbnVwKCJzdHVkeSAzIiwgImNoaWxkcmVuIikKZDQgPC0gY2xlYW51cCgic3R1ZHkgNCIsICJjaGlsZHJlbiIpCmQ1IDwtIGNsZWFudXAoInN0dWR5IDUiLCAiY2hpbGRyZW4iKQoKIyB0d2VhayBieSBoYW5kCmQyIDwtIGQyICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgZmlsdGVyKGFnZSA+PSA3LCBhZ2UgPCAxMCkgJT4lCiAgZmlsdGVyKGNoYXJhY3RlciAhPSAiZWxlcGhhbnQiKQoKZDNfb3V0c2lkZWFnZSA8LSBkMyAlPiUgZmlsdGVyKGFnZSA8IDcgfCBhZ2UgPj0gMTApICU+JSBkaXN0aW5jdChzdWJpZCkKCmQzIDwtIGQzICU+JQogIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSwgY2hhcmFjdGVyICE9ICIiKSAlPiUKICBmaWx0ZXIoIXN1YmlkICVpbiUgZDNfb3V0c2lkZWFnZSRzdWJpZCkgJT4lCiAgIyBmaWx0ZXIoYWdlID49IDcsIGFnZSA8IDEwKSAlPiUKICBtdXRhdGUoZXRobmljaXR5ID0gZ3N1YigiIFNOIiwgIiIsIGV0aG5pY2l0eSkpICU+JQogIG11dGF0ZShyYWNlX2NhdCA9IGlmZWxzZShncmVwbCgiYmluZyIsIHRvbG93ZXIodGVzdGluZ1NpdGUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiQSIsICJlYXN0X2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkMiIHwgZXRobmljaXR5ID09ICJDaiIsICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiSSIsICJzb3V0aF9hc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIk1FIiwgIm1pZGRsZV9lYXN0ZXJuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkFmIiwgImJsYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJIIiwgImhpc3BhbmljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCIgIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCIvIiwgZXRobmljaXR5KSwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiYmxhY2sgb3IgYWZyaWNhbiBhbWVyaWNhbiIsICJibGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJoaXNwYW5pYyBvciBsYXRpbm8vYSIsICJoaXNwYW5pYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiZWFzdCBhc2lhbiIsICJlYXN0X2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAibmF0aXZlIGFtZXJpY2FuLCBhbWVyaWNhbiBpbmRpYW4sIG9yIGFsYXNrYSBuYXRpdmUiLCAibmF0aXZlX2FtZXJpY2FuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIndoaXRlIiB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIndoaXRlLCBjYXVjYXNpYW4sIG9yIGV1cm9wZWFuIGFtZXJpY2FuIiwgIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJzb3V0aCBvciBzb3V0aGVhc3QgYXNpYW4iIHwgdG9sb3dlcihldGhuaWNpdHkpID09ICJzb3V0aCBhc2lhbiIsICJzb3V0aF9hc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIiIgfCBpcy5uYShldGhuaWNpdHkpLCBOQSwgIm11bHRpcmFjaWFsIikpKSkpKSkpKQoKZDQgPC0gZDQgJT4lCiAgZmlsdGVyKCFpcy5uYShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgIT0gIiIpICU+JQogIGZpbHRlcihhZ2UgPj0gNCwgYWdlIDwgNykgJT4lCiAgbXV0YXRlKGV0aG5pY2l0eSA9IGdzdWIoIiBTTiIsICIiLCBldGhuaWNpdHkpKSAlPiUKICBtdXRhdGUocmFjZV9jYXQgPSBpZmVsc2UoZ3JlcGwoImJpbmciLCB0b2xvd2VyKHRlc3RpbmdTaXRlKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkEiLCAiZWFzdF9hc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJDIiB8IGV0aG5pY2l0eSA9PSAiQ2oiLCAid2hpdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkkiLCAic291dGhfYXNpYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJNRSIsICJtaWRkbGVfZWFzdGVybiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJBZiIsICJibGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiSCIsICJoaXNwYW5pYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgiICIsIGV0aG5pY2l0eSkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiLyIsIGV0aG5pY2l0eSksICJtdWx0aXJhY2lhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSkpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gImJsYWNrIG9yIGFmcmljYW4gYW1lcmljYW4iLCAiYmxhY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiaGlzcGFuaWMgb3IgbGF0aW5vL2EiLCAiaGlzcGFuaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gImVhc3QgYXNpYW4iLCAiZWFzdF9hc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIm5hdGl2ZSBhbWVyaWNhbiwgYW1lcmljYW4gaW5kaWFuLCBvciBhbGFza2EgbmF0aXZlIiwgIm5hdGl2ZV9hbWVyaWNhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJ3aGl0ZSIgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9sb3dlcihldGhuaWNpdHkpID09ICJ3aGl0ZSwgY2F1Y2FzaWFuLCBvciBldXJvcGVhbiBhbWVyaWNhbiIsICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAic291dGggb3Igc291dGhlYXN0IGFzaWFuIiB8IHRvbG93ZXIoZXRobmljaXR5KSA9PSAic291dGggYXNpYW4iLCAic291dGhfYXNpYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICIiIHwgaXMubmEoZXRobmljaXR5KSwgTkEsICJtdWx0aXJhY2lhbCIpKSkpKSkpKSkKCmQ1IDwtIGQ1ICU+JQogIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSwgY2hhcmFjdGVyICE9ICIiKSAlPiUKICBmaWx0ZXIoYWdlID49IDUuNSwgYWdlIDwgNy41KSAlPiUKICBtdXRhdGUoZXRobmljaXR5ID0gZ3N1YigiIFNOIiwgIiIsIGV0aG5pY2l0eSkpICU+JQogIG11dGF0ZShyYWNlX2NhdCA9IGlmZWxzZShncmVwbCgiYmluZyIsIHRvbG93ZXIodGVzdGluZ1NpdGUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiQSIsICJlYXN0X2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkMiIHwgZXRobmljaXR5ID09ICJDaiIsICJ3aGl0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGV0aG5pY2l0eSA9PSAiSSIsICJzb3V0aF9hc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIk1FIiwgIm1pZGRsZV9lYXN0ZXJuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShldGhuaWNpdHkgPT0gIkFmIiwgImJsYWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZXRobmljaXR5ID09ICJIIiwgImhpc3BhbmljIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCIgIiwgZXRobmljaXR5KSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCIvIiwgZXRobmljaXR5KSwgIm11bHRpcmFjaWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiYmxhY2sgb3IgYWZyaWNhbiBhbWVyaWNhbiIsICJibGFjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJoaXNwYW5pYyBvciBsYXRpbm8vYSIsICJoaXNwYW5pYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAiZWFzdCBhc2lhbiIsICJlYXN0X2FzaWFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRvbG93ZXIoZXRobmljaXR5KSA9PSAibmF0aXZlIGFtZXJpY2FuLCBhbWVyaWNhbiBpbmRpYW4sIG9yIGFsYXNrYSBuYXRpdmUiLCAibmF0aXZlX2FtZXJpY2FuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIndoaXRlIiB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIndoaXRlLCBjYXVjYXNpYW4sIG9yIGV1cm9wZWFuIGFtZXJpY2FuIiwgIndoaXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UodG9sb3dlcihldGhuaWNpdHkpID09ICJzb3V0aCBvciBzb3V0aGVhc3QgYXNpYW4iIHwgdG9sb3dlcihldGhuaWNpdHkpID09ICJzb3V0aCBhc2lhbiIsICJzb3V0aF9hc2lhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0b2xvd2VyKGV0aG5pY2l0eSkgPT0gIiIgfCBpcy5uYShldGhuaWNpdHkpLCBOQSwgIm11bHRpcmFjaWFsIikpKSkpKSkpKQpgYGAKCmBgYHtyIGRhdGFmcmFtZXMgZm9yIGRpbWVuc2lvbiByZWR1Y2F0aW9uLCBpbmNsdWRlID0gRn0KIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHMxCiMgZDFfYmVldGxlIDwtIG1ha2VEUkRGKCJzdHVkeSAxIiwgImJlZXRsZSIpCiMgZDFfcm9ib3QgPC0gbWFrZURSREYoInN0dWR5IDEiLCAicm9ib3QiKQpkMV9hbGwgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYWxsIikKCiMgbWFrZSBkYXRhZnJhbWVzIGZvciBmb2xsb3ctdXAgc3R1ZGllcyB0byBzMQpkMWJfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAxYiIsICJhbGwiKQpkMWNfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAxYyIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHN0dWR5IDIKIyBkMl9iZWV0bGUgPC0gbWFrZURSREYoInN0dWR5IDIiLCAiYmVldGxlIikKIyBkMl9yb2JvdCA8LSBtYWtlRFJERigic3R1ZHkgMiIsICJyb2JvdCIpCmQyX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMiIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHN0dWR5IDMKIyBkM19iZWV0bGUgPC0gbWFrZURSREYoInN0dWR5IDMiLCAiYmVldGxlIikKIyBkM19yb2JvdCA8LSBtYWtlRFJERigic3R1ZHkgMyIsICJyb2JvdCIpCmQzX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMyIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIHN0dWR5IDQKZDRfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSA0IiwgImFsbCIpCmBgYAoKYGBge3IgZGF0YWZyYW1lIGZvciBzbGlkaW5nIHdpbmRvdywgaW5jbHVkZSA9IEZ9CiMgbWVyZ2UgZGF0YXNldHMgZnJvbSBzdHVkaWVzIDMtNCBhbmQgcnVuIDA0CmRfc2xpZGUgPC0gZDMgJT4lCiAgc2VsZWN0KC10cmlhbC5jb21tZW50cykgJT4lCiAgZnVsbF9qb2luKGQ0ICU+JSBzZWxlY3QoLXRyaWFsLmNvbW1lbnRzKSkgJT4lCiAgZnVsbF9qb2luKGQ1ICU+JSBzZWxlY3QoLXRyaWFsLmNvbW1lbnRzKSkgJT4lCiAgbXV0YXRlKGNhcGFjaXR5ID0gcmVjb2RlKGNhcGFjaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdyeSA9ICJhbmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXMgPSAiY2hvaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2Npb3VzID0gImF3YXJlbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHJlc3NlZCA9ICJzYWRuZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggPSAiZGVwdGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNyZXNwZWN0ZWQgPSAiaHVydCBmZWVsaW5ncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYmFycmFzc2VkID0gImVtYmFycmFzc21lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmZWFyID0gImZlYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBndWlsdCA9ICJndWlsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcHB5ID0gImhhcHBpbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1bmdyeSA9ICJodW5nZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsb3ZlID0gImxvdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuYXVzZWF0ZWQgPSAibmF1c2VhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RvcnMgPSAic21lbGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYWluID0gInBhaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlkZSA9ICJwcmlkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbmluZyA9ICJmaWd1cmluZyBvdXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICByZW1lbWJlcmluZyA9ICJtZW1vcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZSA9ICJ0ZW1wZXJhdHVyZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpcmVkID0gImZhdGlndWUiKSkKCiMgZ2V0IGFnZSByYW5rcwpkX3NsaWRlX3N1YmlkIDwtIGRfc2xpZGUgJT4lCiAgZGlzdGluY3Qoc3ViaWQsIGFnZSkgJT4lCiAgYXJyYW5nZShhZ2UsIHN1YmlkKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImFnZV9yYW5rIikgJT4lCiAgbXV0YXRlKGFnZV9yYW5rID0gYXMubnVtZXJpYyhhZ2VfcmFuaykpCgpkX3NsaWRlIDwtIGRfc2xpZGUgJT4lCiAgZmlsdGVyKHN1YmlkICVpbiUgZF9zbGlkZV9zdWJpZCRzdWJpZCkgJT4lCiAgbGVmdF9qb2luKGRfc2xpZGVfc3ViaWQpICU+JQogIGFycmFuZ2UoYWdlX3JhbmssIHRyaWFsTnVtKSAlPiUKICBmaWx0ZXIoIWlzLm5hKGFnZSkpCgojIG1ha2Ugd2lkZWZyYW1lIGRmCmRfc2xpZGVfYWxsIDwtIGRfc2xpZGUgJT4lCiAgc2VsZWN0KHN1YmlkLCBhZ2UsIGNoYXJhY3RlciwgY2FwYWNpdHksIHJlc3BvbnNlTnVtKSAlPiUKICBtdXRhdGUoYWdlID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoYWdlKSkpICU+JQogIHNwcmVhZChjYXBhY2l0eSwgcmVzcG9uc2VOdW0pICU+JQogIGFycmFuZ2UoYWdlKSAlPiUKICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInN1YmlkIikKCiMgbGltaXQgdG8gY29tcGxldGUgY2FzZXMgZm9yIHRzbmUKZF9zbGlkZV9hbGxfY29tcGxldGUgPC0gZF9zbGlkZV9hbGxbY29tcGxldGUuY2FzZXMoZF9zbGlkZV9hbGwpLF0KYGBgCgojIHQtU05FOiBvbiBjaGFyYWN0ZXJzCgojIyAyIGRpbWVuc2lvbnMKCmBgYHtyIHRzbmUyRH0KIyB0c25lX2QxIDwtIFJ0c25lKGQxX2FsbCwgZGltcyA9IDIsIGluaXRpYWxfZGltcyA9IDMsIAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2QxJFkpCiMgdHNuZV9kMiA8LSBSdHNuZShkMl9hbGwsIGRpbXMgPSAyLCBpbml0aWFsX2RpbXMgPSAzLCAKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kMiRZKQojIHRzbmVfZDMgPC0gUnRzbmUoZDNfYWxsLCBkaW1zID0gMiwgaW5pdGlhbF9kaW1zID0gMywKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kMyRZKQojIHRzbmVfZDQgPC0gUnRzbmUoZDRfYWxsLCBkaW1zID0gMiwgaW5pdGlhbF9kaW1zID0gMywKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kNCRZKQoKIyA0LTEweSBvbiAyMCBxdWVzdGlvbiB2ZXJzaW9uCnRzbmUyRF9kc2xpZGUgPC0gUnRzbmUoZF9zbGlkZV9hbGxfY29tcGxldGVbLWMoMSwyKV0sIGRpbXMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSAyMCwKICAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5ID0gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKQoKdHNuZTJEX2RmIDwtIHRzbmUyRF9kc2xpZGUkWSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgY2JpbmQoZF9zbGlkZV9hbGxfY29tcGxldGVbLGMoImFnZSIsICJjaGFyYWN0ZXIiKV0pICU+JQogIHJlbmFtZSh0c25lMkRfZGltMSA9IFgxLCB0c25lMkRfZGltMiA9IFgyKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbGwiLCAidGVkZHlfYmVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpCmBgYAoKYGBge3IgdHNuZTJEIHNjYXR0ZXJwbG90LCBmaWcud2lkdGggPSA1LCBmaWcuaGVpZ2h0ID0gNH0KZ2dwbG90KHRzbmUyRF9kZiwKICAgICAgIGFlcyh4ID0gdHNuZTJEX2RpbTEsIHkgPSB0c25lMkRfZGltMiwgCiAgICAgICAgICAgY29sb3IgPSBjaGFyYWN0ZXIsIAogICAgICAgICAgIHNpemUgPSBhZ2UpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNikgKyAKICBzY2FsZV9jb2xvcl9icmV3ZXIoImNoYXJhY3RlciIsIHR5cGUgPSAiZGl2IikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpKQpgYGAKCmBgYHtyIHRzbmUyRCAzRCBzY2F0dGVycGxvdCwgZmlnLndpZHRoID0gOCwgZmlnLmhlaWdodCA9IDR9CnBsb3RfbHkodHNuZTJEX2RmLCB4ID0gfihhZ2UqMTApLCB5ID0gfnRzbmUyRF9kaW0xLCB6ID0gfnRzbmUyRF9kaW0yLCAKICAgICAgICBjb2xvciA9IH5jaGFyYWN0ZXIsIGNvbG9ycyA9ICJCckJHIiwgCiAgICAgICAgIyBzaXplID0gfmFnZSwgc2l6ZXMgPSBjKDMwLCAxMzApLAogICAgICAgIG9wYWNpdHkgPSAwLjYpCmBgYAoKCgojIyAzIGRpbWVuc2lvbnMKCmBgYHtyIHRzbmUzRH0KIyB0c25lX2QxIDwtIFJ0c25lKGQxX2FsbCwgZGltcyA9IDMsIGluaXRpYWxfZGltcyA9IDMsIAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2QxJFkpCiMgdHNuZV9kMiA8LSBSdHNuZShkMl9hbGwsIGRpbXMgPSAzLCBpbml0aWFsX2RpbXMgPSAzLCAKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kMiRZKQojIHRzbmVfZDMgPC0gUnRzbmUoZDNfYWxsLCBkaW1zID0gMywgaW5pdGlhbF9kaW1zID0gMywKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kMyRZKQojIHRzbmVfZDQgPC0gUnRzbmUoZDRfYWxsLCBkaW1zID0gMywgaW5pdGlhbF9kaW1zID0gMywKIyAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSk7IHBsb3QodHNuZV9kNCRZKQoKIyA0LTEweSBvbiAyMCBxdWVzdGlvbiB2ZXJzaW9uCnRzbmUzRF9kc2xpZGUgPC0gUnRzbmUoZF9zbGlkZV9hbGxfY29tcGxldGVbLWMoMSwyKV0sIGRpbXMgPSAzLCAKICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSAyMCwKICAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5ID0gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKQoKdHNuZTNEX2RmIDwtIHRzbmUzRF9kc2xpZGUkWSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgY2JpbmQoZF9zbGlkZV9hbGxfY29tcGxldGVbLGMoImFnZSIsICJjaGFyYWN0ZXIiKV0pICU+JQogIHJlbmFtZSh0c25lM0RfZGltMSA9IFgxLCB0c25lM0RfZGltMiA9IFgyLCB0c25lM0RfZGltMyA9IFgzKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbGwiLCAidGVkZHlfYmVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpCmBgYAoKYGBge3IgdHNuZTNEIDNEIHNjYXR0ZXJwbG90LCBmaWcud2lkdGggPSA4LCBmaWcuaGVpZ2h0ID0gOH0KcGxvdF9seSh0c25lM0RfZGYsIHggPSB+dHNuZTNEX2RpbTEsIHkgPSB+dHNuZTNEX2RpbTIsIHogPSB+dHNuZTNEX2RpbTMsIAogICAgICAgIGNvbG9yID0gfmNoYXJhY3RlciwgY29sb3JzID0gIkJyQkciLCAKICAgICAgICBzaXplID0gfmFnZSwgc2l6ZXMgPSBjKDUwLCAyMDApLAogICAgICAgICMgc2l6ZSA9IDQsCiAgICAgICAgb3BhY2l0eSA9IDAuNikKYGBgCgoKCiMjIDQgZGltZW5zaW9ucwoKYGBge3IgdHNuZTREfQojIHRzbmVfZDEgPC0gUnRzbmUoZDFfYWxsLCBkaW1zID0gNCwgaW5pdGlhbF9kaW1zID0gNCwgCiMgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpOyBwbG90KHRzbmVfZDEkWSkKIyB0c25lX2QyIDwtIFJ0c25lKGQyX2FsbCwgZGltcyA9IDQsIGluaXRpYWxfZGltcyA9IDQsIAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2QyJFkpCiMgdHNuZV9kMyA8LSBSdHNuZShkM19hbGwsIGRpbXMgPSA0LCBpbml0aWFsX2RpbXMgPSA0LAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2QzJFkpCiMgdHNuZV9kNCA8LSBSdHNuZShkNF9hbGwsIGRpbXMgPSA0LCBpbml0aWFsX2RpbXMgPSA0LAojICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IEZBTFNFKTsgcGxvdCh0c25lX2Q0JFkpCgojIDQtMTB5IG9uIDIwIHF1ZXN0aW9uIHZlcnNpb24KdHNuZTREX2RzbGlkZSA8LSBSdHNuZShkX3NsaWRlX2FsbF9jb21wbGV0ZVstYygxLDIpXSwgZGltcyA9IDQsIAogICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfZGltcyA9IDIwLAogICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSAxMCwKICAgICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gRkFMU0UpCgp0c25lNERfZGYgPC0gdHNuZTREX2RzbGlkZSRZICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBjYmluZChkX3NsaWRlX2FsbF9jb21wbGV0ZVssYygiYWdlIiwgImNoYXJhY3RlciIpXSkgJT4lCiAgcmVuYW1lKHRzbmU0RF9kaW0xID0gWDEsIHRzbmU0RF9kaW0yID0gWDIsIAogICAgICAgICB0c25lNERfZGltMyA9IFgzLCB0c25lNERfZGltNCA9IFg0KSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbGwiLCAidGVkZHlfYmVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpCmBgYAoKYGBge3IgdHNuZTREIDREIHNjYXR0ZXJwbG90LCBmaWcud2lkdGggPSA4LCBmaWcuaGVpZ2h0ID0gOH0KcGxvdF9seSh0c25lNERfZGYsIHggPSB+dHNuZTREX2RpbTEsIHkgPSB+dHNuZTREX2RpbTIsIHogPSB+dHNuZTREX2RpbTMsIAogICAgICAgIGNvbG9yID0gfmNoYXJhY3RlciwgY29sb3JzID0gIkJyQkciLCAKICAgICAgICBzaXplID0gfnRzbmU0RF9kaW00LCBzaXplcyA9IGMoNTAsIDIwMCksCiAgICAgICAgIyBzaXplID0gfmFnZSwgc2l6ZXMgPSBjKDUwLCAyMDApLAogICAgICAgICMgc2l6ZSA9IDQsCiAgICAgICAgb3BhY2l0eSA9IDAuNikKYGBgCgoKYGBge3J9CnRzbmUyRF9kZl92ZXIyIDwtIHRzbmUyRF9kc2xpZGUkWSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgY2JpbmQoZF9zbGlkZV9hbGxfY29tcGxldGVbXSkgJT4lCiAgcmVuYW1lKHRzbmUyRF9kaW0xID0gWDEsIHRzbmUyRF9kaW0yID0gWDIpICU+JSAjLCAKICAgICAgICAgIyB0c25lMkRfZGltMyA9IFgzLCB0c25lMkRfZGltNCA9IFg0KSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbGwiLCAidGVkZHlfYmVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpCgoKCnRzbmVfY29yIDwtIHRzbmUyRF9kZl92ZXIyICU+JSAKICBzZWxlY3QoLWNoYXJhY3RlcikgJT4lIAogIGNvcigpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ0c25lX2RpbSIpICU+JQogIGZpbHRlcihncmVwbCgidHNuZSIsIHRzbmVfZGltKSA9PSBUKSAlPiUKICBzZWxlY3QoLXN0YXJ0c193aXRoKCJ0c25lMkQiKSkgJT4lCiAgZ2F0aGVyKGNhcGFjaXR5LCBjb3IsIC10c25lX2RpbSkKCnRzbmVfY29yX29yZGVyIDwtIHRzbmVfY29yICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBhYnMoY29yKSkgJT4lCiAgIyBmaWx0ZXIodHNuZV9kaW0gPT0gInRzbmUyRF9kaW0xIikgJT4lCiAgbXV0YXRlKHRzbmVfZGltID0gZmFjdG9yKHRzbmVfZGltKSkgJT4lCiAgYXJyYW5nZSh0c25lX2RpbSwgZGVzYyhhYnMoY29yKSkpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oIm9yZGVyIikgJT4lCiAgbXV0YXRlKG9yZGVyID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIob3JkZXIpKSkKCmdncGxvdCh0c25lX2NvciAlPiUgZnVsbF9qb2luKHRzbmVfY29yX29yZGVyICU+JSBzZWxlY3QoY2FwYWNpdHksIG9yZGVyKSksCiAgICAgICBhZXMoeCA9IHRzbmVfZGltLCB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhvcmRlcikpLCAKICAgICAgICAgICBmaWxsID0gY29yLCBsYWJlbCA9IHJvdW5kKGNvciwgMikpKSArIAogIGdlb21fdGlsZSgpICsKICBnZW9tX3RleHQoKSArIAogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgCiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMSwgMSksIGJyZWFrcyA9IGMoLTEsIDAsIDEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHggPSAiIiwgeSA9ICIiKQoKYGBgCgpgYGB7cn0KdHNuZV9jb3IgJT4lCiAgZmlsdGVyKHRzbmVfZGltID09ICJ0c25lMkRfZGltMSIpICU+JQogIGFycmFuZ2UoZGVzYyhhYnMoY29yKSkpCgp0c25lX2NvciAlPiUKICBmaWx0ZXIodHNuZV9kaW0gPT0gInRzbmUyRF9kaW0yIikgJT4lCiAgYXJyYW5nZShkZXNjKGFicyhjb3IpKSkKCnRzbmVfY29yICU+JQogIGZpbHRlcih0c25lX2RpbSA9PSAidHNuZTJEX2RpbTMiKSAlPiUKICBhcnJhbmdlKGRlc2MoYWJzKGNvcikpKQoKdHNuZV9jb3IgJT4lCiAgZmlsdGVyKHRzbmVfZGltID09ICJ0c25lMkRfZGltNCIpICU+JQogIGFycmFuZ2UoZGVzYyhhYnMoY29yKSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aD00LCBmaWcuaGVpZ2h0PTJ9CnRzbmUyRF9kZl92ZXIyICU+JQogIHNlbGVjdChhZ2UsIGNoYXJhY3Rlciwgc3RhcnRzX3dpdGgoInRzbmUiKSkgJT4lCiAgZ2F0aGVyKHRzbmVfZGltLCBzY29yZSwgc3RhcnRzX3dpdGgoInRzbmUiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWdlLCB5ID0gc2NvcmUsIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X2dyaWQofnRzbmVfZGltKSArCiAgIyBnZW9tX3Ntb290aChhbHBoYSA9IDAuMSkgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGFscGhhID0gMC4xKSArCiAgZ2VvbV9wb2ludChzaXplID0gMSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcih0eXBlID0gImRpdiIsIHBhbGV0dGUgPSAxKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIodHlwZSA9ICJkaXYiLCBwYWxldHRlID0gMSkgKwogIHRoZW1lX2J3KCkKYGBgCgoKIyB0LVNORTogb24gY2FwYWNpdGllcwoKIyMgMiBkaW1lbnNpb25zCgpgYGB7ciB0c25lMkQgbWN9CiMgNC0xMHkgb24gMjAgcXVlc3Rpb24gdmVyc2lvbgpkX3NsaWRlX2FsbF9jb21wbGV0ZV90IDwtIGRfc2xpZGVfYWxsX2NvbXBsZXRlICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY29tcHV0ZXIiLCAicm9ib3QiLCAiZG9sbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVkZHlfYmVhciIsICJiZWV0bGUiLCAiYmlyZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3VzZSIsICJnb2F0IiwgImVsZXBoYW50IikpKSAlPiUKICBhcnJhbmdlKGNoYXJhY3RlciwgYWdlKSAlPiUKICBzZWxlY3QoLWNoYXJhY3RlciwgLWFnZSkgJT4lCiAgdCgpCgp0c25lMkRfbWNfZHNsaWRlIDwtIFJ0c25lKGRfc2xpZGVfYWxsX2NvbXBsZXRlX3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRpbXMgPSAyLCAKICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSAyMCwKICAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5ID0gNSwKICAgICAgICAgICAgICAgICAgICAgICBtYXhfaXRlciA9IDEwMDAwLAogICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBGQUxTRSkKCnRzbmUyRF9tY19kZiA8LSB0c25lMkRfbWNfZHNsaWRlJFkgJT4lCiAgZGF0YS5mcmFtZSgpCgpyb3duYW1lcyh0c25lMkRfbWNfZGYpIDwtIG5hbWVzKGRfc2xpZGVfYWxsX2NvbXBsZXRlKVstYygxLDIpXQogIAp0c25lMkRfbWNfZGYgPC0gdHNuZTJEX21jX2RmICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICByZW5hbWUodHNuZTJEX21jX2RpbTEgPSBYMSwgdHNuZTJEX21jX2RpbTIgPSBYMikKYGBgCgpgYGB7ciB0c25lMkRfbWMgc2NhdHRlcnBsb3QsIGZpZy53aWR0aCA9IDIuNSwgZmlnLmhlaWdodCA9IDR9CmdncGxvdCh0c25lMkRfbWNfZGYsCiAgICAgICBhZXMoeCA9IHRzbmUyRF9tY19kaW0xLCB5ID0gdHNuZTJEX21jX2RpbTIsIAogICAgICAgICAgICMgY29sb3IgPSBjYXBhY2l0eSwgCiAgICAgICAgICAgbGFiZWwgPSBjYXBhY2l0eSkpICsKICAjIGdlb21fcG9pbnQoYWxwaGEgPSAwLjYsIHNpemUgPSA2KSArIAogIGdlb21fbGFiZWwoc2l6ZSA9IDQpICsKICAjIHNjYWxlX2NvbG9yX2JyZXdlcigiY2FwYWNpdHkiLCB0eXBlID0gImRpdiIpICsKICB4bGltKG1pbih0c25lMkRfbWNfZGYkWDEpIC0gMC4yICogc2QodHNuZTJEX21jX2RmJFgxKSwKICAgICAgIG1heCh0c25lMkRfbWNfZGYkWDEpICsgMC4yICogc2QodHNuZTJEX21jX2RmJFgxKSkgKwogIHlsaW0obWluKHRzbmUyRF9tY19kZiRYMikgLSAwLjIgKiBzZCh0c25lMkRfbWNfZGYkWDIpLAogICAgICAgbWF4KHRzbmUyRF9tY19kZiRYMikgKyAwLjIgKiBzZCh0c25lMkRfbWNfZGYkWDIpKSArCiAgbGFicyh4ID0gInQtU05FIGRpbWVuc2lvbiAxIiwgeSA9ICJ0LVNORSBkaW1lbnNpb24gMiIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmBgYAoKIyMgMiBkaW1lbnNpb25zIHNsaWRpbmcgd2luZG93CgpgYGB7cn0KZWZhX2NvbG9ycyA8LSBmYShkX3NsaWRlX2FsbF9jb21wbGV0ZVstYygxLDIpXSwgCiAgICAgICAgICAgICAgICAgbmZhY3RvcnMgPSAzLCByb3RhdGUgPSAib2JsaW1pbiIpJGxvYWRpbmdzW10gJT4lCiAgZmEuc29ydCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIk1SMSIsICJNUjIiLCAiTVIzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJIRUFSVCIsICJNSU5EIiwgIkJPRFkiKSkpCmBgYAoKYGBge3J9CiMgbWFrZSB0c25lIGZ1bmN0aW9uCnRzbmVfZnVuIDwtIGZ1bmN0aW9uKGRmLCBuID0gMTIwLAogICAgICAgICAgICAgICAgICAgICBkaW1zX3NldCA9IDIsIGluaXRpYWxfZGltc19zZXQgPSA1MCwgCiAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gNSwgbWF4X2l0ZXJfc2V0ID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gMC41LAogICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzX3NldCA9IEZBTFNFKXsKICAKICBkZl90ZW1wIDwtIGRmW2NvbXBsZXRlLmNhc2VzKGRmKSxdICU+JQogICAgdG9wX24oLW4sIGFnZSkgJT4lCiAgICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlZGR5X2JlYXIiLCAiYmVldGxlIiwgImJpcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZ29hdCIsICJlbGVwaGFudCIpKSkgJT4lCiAgYXJyYW5nZShjaGFyYWN0ZXIsIGFnZSkgJT4lCiAgc2VsZWN0KC1jaGFyYWN0ZXIsIC1lbmRzX3dpdGgoImFnZSIpKSAlPiUKICB0KCkKICAKICB0c25lMkQgPC0gUnRzbmUoZGZfdGVtcCwKICAgICAgICAgICAgICAgICAgZGltcyA9IGRpbXNfc2V0LAogICAgICAgICAgICAgICAgICBpbml0aWFsX2RpbXMgPSBpbml0aWFsX2RpbXNfc2V0LAogICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5ID0gcGVycGxleGl0eV9zZXQsCiAgICAgICAgICAgICAgICAgIHRoZXRhID0gdGhldGFfc2V0LAogICAgICAgICAgICAgICAgICBtYXhfaXRlciA9IG1heF9pdGVyX3NldCwKICAgICAgICAgICAgICAgICAgY2hlY2tfZHVwbGljYXRlcyA9IGNoZWNrX2R1cGxpY2F0ZXNfc2V0KQogIAogIHRzbmUyRF9kZiA8LSB0c25lMkQkWSAlPiUKICAgIGRhdGEuZnJhbWUoKQogIAogIHJvd25hbWVzKHRzbmUyRF9kZikgPC0gbmFtZXMoZGYpWy1jKDEsMildCiAgCiAgdHNuZTJEX2RmIDwtIHRzbmUyRF9kZiAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKQogIAogIHJldHVybih0c25lMkRfZGYpCn0KYGBgCgoKYGBge3J9CiMgc2V0IHdpbmRvdyBzaXplCndpbmRvd19zaXplIDwtIDEyMAoKIyBkbyBzbGlkaW5nIHdpbmRvdwphbGxfdHNuZSA8LSBsaXN0KE5VTEwpCmZvcihpIGluIDE6KGxlbmd0aChkX3NsaWRlX2FsbF9jb21wbGV0ZSRhZ2UpLXdpbmRvd19zaXplKSkgewogIHRzbmVfdGVtcCA8LSB0c25lX2Z1bihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlLCBuID0gd2luZG93X3NpemUpCiAgYWxsX3RzbmVbW2ldXSA8LSB0c25lX3RlbXAKfQoKYWxsX3RzbmVfZGYgPC0gZGF0YS5mcmFtZSgpCgojIGdldCBpbnRvIG9uZSBkZgpmb3IoaSBpbiAxOmxlbmd0aChhbGxfdHNuZSkpewogIHRzbmVfdGVtcCA8LSBhbGxfdHNuZVtbaV1dICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgbXV0YXRlKHdpbmRvdyA9IGkpCiAgCiAgYWxsX3RzbmVfZGYgPC0gcmJpbmQoYWxsX3RzbmVfZGYsIHRzbmVfdGVtcCkKfQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxMiwgZmlnLmhlaWdodCA9IDEyfQpnZ3Bsb3QoYWxsX3RzbmVfZGYsCiAgICAgICBhZXMoeCA9IFgxLCB5ID0gWDIsIAogICAgICAgICAgIGNvbG9yID0gY2FwYWNpdHksIGdyb3VwID0gY2FwYWNpdHkpKSArCiAgICAgICAgICAgIyBhbHBoYSA9IHdpbmRvdykpICsKICBmYWNldF93cmFwKH4gd2luZG93LCBzY2FsZXMgPSAiZnJlZSIpICsKICAjIGdlb21fcGF0aCgpICsKICBnZW9tX3BvaW50KCkgKwogIHhsaW0obWluKHRzbmUyRF9tY19kZiR0c25lMkRfbWNfZGltMSkgLSAwLjIgKiBzZCh0c25lMkRfbWNfZGYkdHNuZTJEX21jX2RpbTEpLAogICAgICAgbWF4KHRzbmUyRF9tY19kZiR0c25lMkRfbWNfZGltMSkgKyAwLjIgKiBzZCh0c25lMkRfbWNfZGYkdHNuZTJEX21jX2RpbTEpKSArCiAgeWxpbShtaW4odHNuZTJEX21jX2RmJHRzbmUyRF9tY19kaW0yKSAtIDAuMiAqIHNkKHRzbmUyRF9tY19kZiR0c25lMkRfbWNfZGltMiksCiAgICAgICBtYXgodHNuZTJEX21jX2RmJHRzbmUyRF9tY19kaW0yKSArIDAuMiAqIHNkKHRzbmUyRF9tY19kZiR0c25lMkRfbWNfZGltMikpICsKICBsYWJzKHggPSAidC1TTkUgZGltZW5zaW9uIDEiLCB5ID0gInQtU05FIGRpbWVuc2lvbiAyIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKYGBge3J9CiMgbWFrZSBxdWFudGlsZXMKZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgPC0gZF9zbGlkZV9hbGxfY29tcGxldGUgJT4lCiAgbXV0YXRlKGJpbiA9IG50aWxlKGFnZSwgNSkpICU+JQogIGdyb3VwX2J5KGJpbikgJT4lCiAgbXV0YXRlKG1pbl9hZ2UgPSBtaW4oYWdlKSwKICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UpLAogICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICBtZWRfYWdlID0gbWVkaWFuKGFnZSkpICU+JQogIHVuZ3JvdXAoKQoKIyBzZXQgcGVycGxleGl0eQpwZXJwIDwtIDYKbl9pdGVyIDwtIDEwMDAwCnRoZXRhIDwtIDAKCiMgNCBhZ2UgZ3JvdXBzCnRzbmUxIDwtIHRzbmVfZnVuKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gMSkgJT4lCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9hZ2UiKSwgLWJpbiksCiAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAogICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKdHNuZTIgPC0gdHNuZV9mdW4oZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSAyKSAlPiUKICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQp0c25lMyA8LSB0c25lX2Z1bihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JQogICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gMykgJT4lCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9hZ2UiKSwgLWJpbiksCiAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAogICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKdHNuZTQgPC0gdHNuZV9mdW4oZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSA0KSAlPiUKICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQp0c25lNSA8LSB0c25lX2Z1bihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDUpICU+JQogICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAogICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCgpxdWFudGlsZV9hbGwgPC0gdHNuZTEgJT4lIG11dGF0ZShiaW4gPSAxKSAlPiUKICBmdWxsX2pvaW4odHNuZTIgJT4lIG11dGF0ZShiaW4gPSAyKSkgJT4lCiAgZnVsbF9qb2luKHRzbmUzICU+JSBtdXRhdGUoYmluID0gMykpICU+JQogIGZ1bGxfam9pbih0c25lNCAlPiUgbXV0YXRlKGJpbiA9IDQpKSAlPiUKICBmdWxsX2pvaW4odHNuZTUgJT4lIG11dGF0ZShiaW4gPSA1KSkgJT4lCiAgZnVsbF9qb2luKGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JQogICAgICAgICAgICAgIHNlbGVjdChiaW4sIGVuZHNfd2l0aCgiX2FnZSIpKSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdCgpKSAlPiUKICBtdXRhdGUoYmluX2xhYmVsID0gcGFzdGUwKHJvdW5kKG1pbl9hZ2UsIDIpLCAiLSIsIHJvdW5kKG1heF9hZ2UsIDIpLCAieSIpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA5LCBmaWcuaGVpZ2h0ID0gM30KZ2dwbG90KHF1YW50aWxlX2FsbCAlPiUKICAgICAgICAgZnVsbF9qb2luKGVmYV9jb2xvcnMgJT4lIHNlbGVjdChjYXBhY2l0eSwgZmFjdG9yKSksCiAgICAgICAgICAgIGFlcyh4ID0gWDEsIHkgPSBYMiwgbGFiZWwgPSBjYXBhY2l0eSwgY29sb3IgPSBmYWN0b3IpKSArCiAgIyBmYWNldF93cmFwKH4gYmluX2xhYmVsLCBzY2FsZXMgPSAiZnJlZSIpICsgIywgbmNvbCA9IDUpICsKICBmYWNldF9ncmlkKH4gYmluX2xhYmVsLCBzY2FsZXMgPSAiZnJlZV94Iiwgc3BhY2UgPSAiZnJlZV94IikgKyAjLCBuY29sID0gNSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKCkgKwogIHRoZW1lX2J3KCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiM0ZGFmNGEiLCAiI2U0MWExYyIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgMTAwKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMDAsIDEwMDAsIDEwMCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKSArCiAgbGFicyh0aXRsZSA9ICJ0LVNORSBieSBhZ2UgcXVpbnRpbGUgKHNlZSBmYWNldCBsYWJlbHMgZm9yIGFnZSByYW5nZSkiLAogICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgicGVycGxleGl0eTogIiwgcGVycCwgIjsgaXRlcmF0aW9uczogIiwgbl9pdGVyLCAiXG4obm90ZTogc2NhbGVzIHZhcnkgYnkgcXVpbnRpbGUpIiksCiAgICAgIHggPSAidC1TTkUgZGltZW5zaW9uIDEiLAogICAgICB5ID0gInQtU05FIGRpbWVuc2lvbiAyIikKYGBgCgpgYGB7cn0KIyBtYWtlIHRzbmUgZnVuY3Rpb24gLSBjb2xsYXBzZSBieSBjaGFyYWN0ZXIKdHNuZV9mdW5fYnljaGFyIDwtIGZ1bmN0aW9uKGRmLCBuID0gMTIwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltc19zZXQgPSAyLCBpbml0aWFsX2RpbXNfc2V0ID0gNTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IDUsIG1heF9pdGVyX3NldCA9IDEwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzX3NldCA9IEZBTFNFKXsKICAKICBkZl90ZW1wIDwtIGRmW2NvbXBsZXRlLmNhc2VzKGRmKSxdICU+JQogICAgdG9wX24oLW4sIGFnZSkgJT4lCiAgICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlZGR5X2JlYXIiLCAiYmVldGxlIiwgImJpcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW91c2UiLCAiZ29hdCIsICJlbGVwaGFudCIpKSkgJT4lCiAgICBzZWxlY3QoLWFnZSkgJT4lCiAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICAgIGdhdGhlcihjYXBhY2l0eSwgcmVzcG9uc2UsIC1zdWJpZCwgLWNoYXJhY3RlcikgJT4lCiAgICBncm91cF9ieShjaGFyYWN0ZXIsIGNhcGFjaXR5KSAlPiUKICAgIHN1bW1hcmlzZShtZWFuID0gbWVhbihyZXNwb25zZSkpICU+JQogICAgYXJyYW5nZShjaGFyYWN0ZXIsIGNhcGFjaXR5KSAlPiUKICAgIHNwcmVhZChjaGFyYWN0ZXIsIG1lYW4pICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiAgICBjb2x1bW5fdG9fcm93bmFtZXMoImNhcGFjaXR5IikKICAKICAjIG5hbWVzKGRmX3RlbXApIDwtIGRmX3RlbXBbMSxdICU+JSB0KCkgJT4lIGMoKQogICMgZGZfdGVtcCA8LSBkZl90ZW1wWy0xLF0KCiAgdHNuZTJEIDwtIFJ0c25lKGRmX3RlbXAsCiAgICAgICAgICAgICAgICAgIGRpbXMgPSBkaW1zX3NldCwKICAgICAgICAgICAgICAgICAgaW5pdGlhbF9kaW1zID0gaW5pdGlhbF9kaW1zX3NldCwKICAgICAgICAgICAgICAgICAgcGVycGxleGl0eSA9IHBlcnBsZXhpdHlfc2V0LAogICAgICAgICAgICAgICAgICB0aGV0YSA9IHRoZXRhX3NldCwKICAgICAgICAgICAgICAgICAgbWF4X2l0ZXIgPSBtYXhfaXRlcl9zZXQsCiAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXMgPSBjaGVja19kdXBsaWNhdGVzX3NldCkKICAKICB0c25lMkRfZGYgPC0gdHNuZTJEJFkgJT4lCiAgICBkYXRhLmZyYW1lKCkKICAKICByb3duYW1lcyh0c25lMkRfZGYpIDwtIG5hbWVzKGRmKVstYygxLDIpXQogIAogIHRzbmUyRF9kZiA8LSB0c25lMkRfZGYgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikKICAKICByZXR1cm4odHNuZTJEX2RmKQp9CmBgYAoKYGBge3J9CiMgbWFrZSBxdWFudGlsZXMKZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgPC0gZF9zbGlkZV9hbGxfY29tcGxldGUgJT4lCiAgbXV0YXRlKGJpbiA9IG50aWxlKGFnZSwgNSkpICU+JQogIGdyb3VwX2J5KGJpbikgJT4lCiAgbXV0YXRlKG1pbl9hZ2UgPSBtaW4oYWdlKSwKICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UpLAogICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICBtZWRfYWdlID0gbWVkaWFuKGFnZSkpICU+JQogIHVuZ3JvdXAoKQoKIyBzZXQgcGVycGxleGl0eQpwZXJwIDwtIDIKbl9pdGVyIDwtIDEwMDAwCnRoZXRhIDwtIDAKCiMgNCBhZ2UgZ3JvdXBzCnRzbmUxIDwtIHRzbmVfZnVuX2J5Y2hhcihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDEpICU+JQogICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAogICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCnRzbmUyIDwtIHRzbmVfZnVuX2J5Y2hhcihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDIpICU+JQogICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAogICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCnRzbmUzIDwtIHRzbmVfZnVuX2J5Y2hhcihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JQogICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gMykgJT4lCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9hZ2UiKSwgLWJpbiksCiAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAogICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKdHNuZTQgPC0gdHNuZV9mdW5fYnljaGFyKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gNCkgJT4lCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9hZ2UiKSwgLWJpbiksCiAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAogICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKdHNuZTUgPC0gdHNuZV9mdW5fYnljaGFyKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lIAogICAgICAgICAgICAgICAgICAgIGZpbHRlcihiaW4gPT0gNSkgJT4lCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9hZ2UiKSwgLWJpbiksCiAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAogICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKCnF1YW50aWxlX2FsbCA8LSB0c25lMSAlPiUgbXV0YXRlKGJpbiA9IDEpICU+JQogIGZ1bGxfam9pbih0c25lMiAlPiUgbXV0YXRlKGJpbiA9IDIpKSAlPiUKICBmdWxsX2pvaW4odHNuZTMgJT4lIG11dGF0ZShiaW4gPSAzKSkgJT4lCiAgZnVsbF9qb2luKHRzbmU0ICU+JSBtdXRhdGUoYmluID0gNCkpICU+JQogIGZ1bGxfam9pbih0c25lNSAlPiUgbXV0YXRlKGJpbiA9IDUpKSAlPiUKICBmdWxsX2pvaW4oZF9zbGlkZV9hbGxfY29tcGxldGVfcXVhbnRpbGUgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KGJpbiwgZW5kc193aXRoKCJfYWdlIikpICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KCkpICU+JQogIG11dGF0ZShiaW5fbGFiZWwgPSBwYXN0ZTAocm91bmQobWluX2FnZSwgMiksICItIiwgcm91bmQobWF4X2FnZSwgMiksICJ5IikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDksIGZpZy5oZWlnaHQgPSAzfQpnZ3Bsb3QocXVhbnRpbGVfYWxsICU+JQogICAgICAgICBmdWxsX2pvaW4oZWZhX2NvbG9ycyAlPiUgc2VsZWN0KGNhcGFjaXR5LCBmYWN0b3IpKSwKICAgICAgICAgICAgYWVzKHggPSBYMSwgeSA9IFgyLCBsYWJlbCA9IGNhcGFjaXR5LCBjb2xvciA9IGZhY3RvcikpICsKICAjIGZhY2V0X3dyYXAofiBiaW5fbGFiZWwsIHNjYWxlcyA9ICJmcmVlIikgKyAjLCBuY29sID0gNSkgKwogIGZhY2V0X2dyaWQofiBiaW5fbGFiZWwsIHNjYWxlcyA9ICJmcmVlX3giLCBzcGFjZSA9ICJmcmVlX3giKSArICMsIG5jb2wgPSA1KSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoKSArCiAgdGhlbWVfYncoKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMzNzdlYjgiLCAiIzRkYWY0YSIsICIjZTQxYTFjIikpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMDApKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgMTAwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpICsKICBsYWJzKHRpdGxlID0gInQtU05FIGJ5IGFnZSBxdWludGlsZSAoc2VlIGZhY2V0IGxhYmVscyBmb3IgYWdlIHJhbmdlKSIsCiAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJwZXJwbGV4aXR5OiAiLCBwZXJwLCAiOyBpdGVyYXRpb25zOiAiLCBuX2l0ZXIsICJcbihub3RlOiBzY2FsZXMgdmFyeSBieSBxdWludGlsZSkiKSwKICAgICAgeCA9ICJ0LVNORSBkaW1lbnNpb24gMSIsCiAgICAgIHkgPSAidC1TTkUgZGltZW5zaW9uIDIiKQpgYGAKCmBgYHtyfQojIG1ha2UgdHNuZSBmdW5jdGlvbiAtIGNvbGxhcHNlIGJ5IGNoYXJhY3Rlcgp0c25lX2Z1bl9ieWNoYXJfYWdlc2xpY2UgPC0gZnVuY3Rpb24oZGYsIG4gPSAxMjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1zX3NldCA9IDIsIGluaXRpYWxfZGltc19zZXQgPSA1MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gNSwgbWF4X2l0ZXJfc2V0ID0gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2R1cGxpY2F0ZXNfc2V0ID0gRkFMU0UpewogIAogIGRmX3RlbXAgPC0gZGZbY29tcGxldGUuY2FzZXMoZGYpLF0gJT4lCiAgICB0b3BfbigtbiwgYWdlKSAlPiUKICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY29tcHV0ZXIiLCAicm9ib3QiLCAiZG9sbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVkZHlfYmVhciIsICJiZWV0bGUiLCAiYmlyZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3VzZSIsICJnb2F0IiwgImVsZXBoYW50IikpKSAlPiUKICAgIG11dGF0ZShhZ2VfYmluID0gbnRpbGUoYWdlLCA1KSkgJT4lCiAgICByZW1vdmVfcm93bmFtZXMoKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICAgIHNlbGVjdCgtYWdlKSAlPiUKICAgIGdhdGhlcihjYXBhY2l0eSwgcmVzcG9uc2UsIC1zdWJpZCwgLWNoYXJhY3RlciwgLWFnZV9iaW4pICU+JQogICAgZ3JvdXBfYnkoYWdlX2JpbiwgY2hhcmFjdGVyLCBjYXBhY2l0eSkgJT4lCiAgICBzdW1tYXJpc2UobWVhbiA9IG1lYW4ocmVzcG9uc2UpKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIG11dGF0ZShjaGFyX2FnZSA9IHBhc3RlKGNoYXJhY3RlciwgYWdlX2Jpbiwgc2VwID0gIl8iKSkgJT4lCiAgICBzZWxlY3QoLWFnZV9iaW4sIC1jaGFyYWN0ZXIpICU+JQogICAgc3ByZWFkKGNoYXJfYWdlLCBtZWFuKSAlPiUKICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgY29sdW1uX3RvX3Jvd25hbWVzKCJjYXBhY2l0eSIpCiAgCiAgIyBuYW1lcyhkZl90ZW1wKSA8LSBkZl90ZW1wWzEsXSAlPiUgdCgpICU+JSBjKCkKICAjIGRmX3RlbXAgPC0gZGZfdGVtcFstMSxdCgogIHRzbmUyRCA8LSBSdHNuZShkZl90ZW1wLAogICAgICAgICAgICAgICAgICBkaW1zID0gZGltc19zZXQsCiAgICAgICAgICAgICAgICAgIGluaXRpYWxfZGltcyA9IGluaXRpYWxfZGltc19zZXQsCiAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHkgPSBwZXJwbGV4aXR5X3NldCwKICAgICAgICAgICAgICAgICAgdGhldGEgPSB0aGV0YV9zZXQsCiAgICAgICAgICAgICAgICAgIG1heF9pdGVyID0gbWF4X2l0ZXJfc2V0LAogICAgICAgICAgICAgICAgICBjaGVja19kdXBsaWNhdGVzID0gY2hlY2tfZHVwbGljYXRlc19zZXQpCiAgCiAgdHNuZTJEX2RmIDwtIHRzbmUyRCRZICU+JQogICAgZGF0YS5mcmFtZSgpCiAgCiAgcm93bmFtZXModHNuZTJEX2RmKSA8LSBuYW1lcyhkZilbLWMoMSwyKV0KICAKICB0c25lMkRfZGYgPC0gdHNuZTJEX2RmICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpCiAgCiAgcmV0dXJuKHRzbmUyRF9kZikKfQpgYGAKCmBgYHtyfQojIG1ha2UgcXVhbnRpbGVzCmRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlIDwtIGRfc2xpZGVfYWxsX2NvbXBsZXRlICU+JQogIG11dGF0ZShiaW4gPSBudGlsZShhZ2UsIDUpKSAlPiUKICBncm91cF9ieShiaW4pICU+JQogIG11dGF0ZShtaW5fYWdlID0gbWluKGFnZSksCiAgICAgICAgIG1heF9hZ2UgPSBtYXgoYWdlKSwKICAgICAgICAgbWVhbl9hZ2UgPSBtZWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgbWVkX2FnZSA9IG1lZGlhbihhZ2UpKSAlPiUKICB1bmdyb3VwKCkKCiMgc2V0IHBlcnBsZXhpdHkKcGVycCA8LSA0Cm5faXRlciA8LSAxMDAwMAp0aGV0YSA8LSAwCgojIDQgYWdlIGdyb3Vwcwp0c25lMSA8LSB0c25lX2Z1bl9ieWNoYXJfYWdlc2xpY2UoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSAxKSAlPiUKICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQp0c25lMiA8LSB0c25lX2Z1bl9ieWNoYXJfYWdlc2xpY2UoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGJpbiA9PSAyKSAlPiUKICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLWVuZHNfd2l0aCgiX2FnZSIpLCAtYmluKSwKICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQp0c25lMyA8LSB0c25lX2Z1bl9ieWNoYXJfYWdlc2xpY2UoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZV9xdWFudGlsZSAlPiUKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDMpICU+JQogICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAogICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCnRzbmU0IDwtIHRzbmVfZnVuX2J5Y2hhcl9hZ2VzbGljZShkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDQpICU+JQogICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAogICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCnRzbmU1IDwtIHRzbmVfZnVuX2J5Y2hhcl9hZ2VzbGljZShkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JSAKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoYmluID09IDUpICU+JQogICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtZW5kc193aXRoKCJfYWdlIiksIC1iaW4pLAogICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCgpxdWFudGlsZV9hbGwgPC0gdHNuZTEgJT4lIG11dGF0ZShiaW4gPSAxKSAlPiUKICBmdWxsX2pvaW4odHNuZTIgJT4lIG11dGF0ZShiaW4gPSAyKSkgJT4lCiAgZnVsbF9qb2luKHRzbmUzICU+JSBtdXRhdGUoYmluID0gMykpICU+JQogIGZ1bGxfam9pbih0c25lNCAlPiUgbXV0YXRlKGJpbiA9IDQpKSAlPiUKICBmdWxsX2pvaW4odHNuZTUgJT4lIG11dGF0ZShiaW4gPSA1KSkgJT4lCiAgZnVsbF9qb2luKGRfc2xpZGVfYWxsX2NvbXBsZXRlX3F1YW50aWxlICU+JQogICAgICAgICAgICAgIHNlbGVjdChiaW4sIGVuZHNfd2l0aCgiX2FnZSIpKSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdCgpKSAlPiUKICBtdXRhdGUoYmluX2xhYmVsID0gcGFzdGUwKHJvdW5kKG1pbl9hZ2UsIDIpLCAiLSIsIHJvdW5kKG1heF9hZ2UsIDIpLCAieSIpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA5LCBmaWcuaGVpZ2h0ID0gM30KZ2dwbG90KHF1YW50aWxlX2FsbCAlPiUKICAgICAgICAgZnVsbF9qb2luKGVmYV9jb2xvcnMgJT4lIHNlbGVjdChjYXBhY2l0eSwgZmFjdG9yKSksCiAgICAgICAgICAgIGFlcyh4ID0gWDEsIHkgPSBYMiwgbGFiZWwgPSBjYXBhY2l0eSwgY29sb3IgPSBmYWN0b3IpKSArCiAgIyBmYWNldF93cmFwKH4gYmluX2xhYmVsLCBzY2FsZXMgPSAiZnJlZSIpICsgIywgbmNvbCA9IDUpICsKICBmYWNldF9ncmlkKH4gYmluX2xhYmVsLCBzY2FsZXMgPSAiZnJlZV94Iiwgc3BhY2UgPSAiZnJlZV94IikgKyAjLCBuY29sID0gNSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKCkgKwogIHRoZW1lX2J3KCkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIjMzc3ZWI4IiwgIiM0ZGFmNGEiLCAiI2U0MWExYyIpKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwMCwgMTAwMCwgMTAwKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMDAsIDEwMDAsIDEwMCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKSArCiAgbGFicyh0aXRsZSA9ICJ0LVNORSBieSBhZ2UgcXVpbnRpbGUgKHNlZSBmYWNldCBsYWJlbHMgZm9yIGFnZSByYW5nZSkiLAogICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgicGVycGxleGl0eTogIiwgcGVycCwgIjsgaXRlcmF0aW9uczogIiwgbl9pdGVyLCAiXG4obm90ZTogc2NhbGVzIHZhcnkgYnkgcXVpbnRpbGUpIiksCiAgICAgIHggPSAidC1TTkUgZGltZW5zaW9uIDEiLAogICAgICB5ID0gInQtU05FIGRpbWVuc2lvbiAyIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmhlaWdodCA9IDN9CnBlcnAgPC0gMgp0c25lX2FsbCA8LSB0c25lX2Z1bihkZiA9IGRfc2xpZGVfYWxsX2NvbXBsZXRlLAogICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5X3NldCA9IHBlcnAsIG1heF9pdGVyX3NldCA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgICAgdGhldGFfc2V0ID0gdGhldGEpCiMgdHNuZV9hbGwgPC0gdHNuZV9mdW5fYnljaGFyKGRmID0gZF9zbGlkZV9hbGxfY29tcGxldGUsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnBsZXhpdHlfc2V0ID0gcGVycCwgbWF4X2l0ZXJfc2V0ID0gbl9pdGVyLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV0YV9zZXQgPSB0aGV0YSkKIyB0c25lX2FsbCA8LSB0c25lX2Z1bl9ieWNoYXJfYWdlc2xpY2UoZGYgPSBkX3NsaWRlX2FsbF9jb21wbGV0ZSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycGxleGl0eV9zZXQgPSBwZXJwLCBtYXhfaXRlcl9zZXQgPSBuX2l0ZXIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXRhX3NldCA9IHRoZXRhKQoKZ2dwbG90KHRzbmVfYWxsICU+JQogICAgICAgICBmdWxsX2pvaW4oZWZhX2NvbG9ycyAlPiUgc2VsZWN0KGNhcGFjaXR5LCBmYWN0b3IpKSwKICAgICAgICAgICAgYWVzKHggPSBYMSwgeSA9IFgyLCBsYWJlbCA9IGNhcGFjaXR5LCBjb2xvciA9IGZhY3RvcikpICsKICAjIGZhY2V0X3dyYXAofiBiaW5fbGFiZWwsIHNjYWxlcyA9ICJmcmVlIikgKyAjLCBuY29sID0gNSkgKwogICMgZmFjZXRfZ3JpZCh+IGJpbl9sYWJlbCwgc2NhbGVzID0gImZyZWVfeCIsIHNwYWNlID0gImZyZWVfeCIpICsgIywgbmNvbCA9IDUpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbCgpICsKICB0aGVtZV9idygpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiIzM3N2ViOCIsICIjNGRhZjRhIiwgIiNlNDFhMWMiKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMDAsIDEwMDAsIDEwMCkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAwLCAxMDAwLCAxMDApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkgKwogIGxhYnModGl0bGUgPSAidC1TTkUiLAogICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgicGVycGxleGl0eTogIiwgcGVycCwgIjsgaXRlcmF0aW9uczogIiwgbl9pdGVyKSwKICAgICAgeCA9ICJ0LVNORSBkaW1lbnNpb24gMSIsCiAgICAgIHkgPSAidC1TTkUgZGltZW5zaW9uIDIiKQpgYGAKCg==